home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-03 | 4.0 KB | 119 lines | [TEXT/MPS ] |
- // UClassDesc.Private.h
- // Copyright © 1984-96 by Apple Computer, Inc. All rights reserved.
-
- #ifndef __UCLASSDESC_PRIVATE__
- #define __UCLASSDESC_PRIVATE__
-
- //========================================================================================
- // Macros for generating and accessing class information
- //========================================================================================
-
- // ----- Internal macros.
-
- #define _MA_CLASSDESC(name) \
- (&name::fgClassDesc)
-
- #define _MA_CLASS_ANCESTORS(name) \
- name::fgAncestors
-
- #define _MA_CLASS_OFFSETS(name) \
- name::fgAncestorOffsets
-
- const unsigned long MA_kDummyAddress = 1024;
- #define _MA_BASE_OFFSET(derived, ancestor) \
- ((ptrdiff_t)(((char*)((ancestor*)((derived*)MA_kDummyAddress))) - (char*)MA_kDummyAddress))
-
- #define _MA_DEFINE_CLASSINFO_OBJECT(name) \
- const char* gClassName##name = #name; \
- const ClassDesc name::fgClassDesc(gClassName##name, sizeof(name), \
- _MA_CLASS_ANCESTORS(name), \
- _MA_CLASS_OFFSETS(name));
-
- //----------------------------------------------------------------------------------------
-
- #define _MA_CLASS_ANCESTORS_IMPLEMENT_M0(name) \
- const MA_ClassReference _MA_CLASS_ANCESTORS(name)[] = \
- { \
- 0 \
- }; \
- const ptrdiff_t _MA_CLASS_OFFSETS(name)[] = \
- { \
- 0 \
- };
-
- #define _MA_CLASS_ANCESTORS_IMPLEMENT_M1(name, a) \
- const MA_ClassReference _MA_CLASS_ANCESTORS(name)[] = \
- { \
- _MA_CLASSDESC(a), \
- 0 \
- }; \
- const ptrdiff_t _MA_CLASS_OFFSETS(name)[] = \
- { \
- _MA_BASE_OFFSET(name, a), \
- 0 \
- };
-
- #define _MA_CLASS_ANCESTORS_IMPLEMENT_M2(name, a1, a2) \
- const MA_ClassReference _MA_CLASS_ANCESTORS(name)[] = \
- { \
- _MA_CLASSDESC(a1), \
- _MA_CLASSDESC(a2), \
- 0 \
- }; \
- const ptrdiff_t _MA_CLASS_OFFSETS(name)[] = \
- { \
- _MA_BASE_OFFSET(name, a1), \
- _MA_BASE_OFFSET(name, a2), \
- 0 \
- };
-
- #define _MA_CLASS_ANCESTORS_IMPLEMENT_M3(name, a1, a2, a3) \
- const MA_ClassReference _MA_CLASS_ANCESTORS(name)[] = \
- { \
- _MA_CLASSDESC(a1), \
- _MA_CLASSDESC(a2), \
- _MA_CLASSDESC(a3), \
- 0 \
- }; \
- const ptrdiff_t _MA_CLASS_OFFSETS(name)[] = \
- { \
- _MA_BASE_OFFSET(name, a1), \
- _MA_BASE_OFFSET(name, a2), \
- _MA_BASE_OFFSET(name, a3), \
- 0 \
- };
-
- #define _MA_CLASS_ANCESTORS_IMPLEMENT_M4(name, a1, a2, a3, a4)\
- const MA_ClassReference _MA_CLASS_ANCESTORS(name)[] = \
- { \
- _MA_CLASSDESC(a1), \
- _MA_CLASSDESC(a2), \
- _MA_CLASSDESC(a3), \
- _MA_CLASSDESC(a4), \
- 0 \
- }; \
- const ptrdiff_t _MA_CLASS_OFFSETS(name)[] = \
- { \
- _MA_BASE_OFFSET(name, a1), \
- _MA_BASE_OFFSET(name, a2), \
- _MA_BASE_OFFSET(name, a3), \
- _MA_BASE_OFFSET(name, a4), \
- 0 \
- };
-
- //----------------------------------------------------------------------------------------
-
- #define _MA_DEFINE_CLASS_METHODS(name) \
- MA_ClassReference name::GetClassDescDynamic(void) const \
- { \
- return _MA_CLASSDESC(name); \
- } \
- void* name::_DefaultConstructor() \
- { \
- return new name; \
- }
-
- //----------------------------------------------------------------------------------------
-
- #endif // __UCLASSDESC_PRIVATE__
-